草庐IT

C++ 空类或 typedef

全部标签

c++ - 类范围 typedef 不好的做法?

在类范围内声明typedef是不好的做法吗?为每个函数声明它们以确保没有人包含该文件然后创建具有相同名称的东西是否更好?例如typedefstd::vector::size_typevec_int;在我的一些标题中会有用,因为在某些类中有许多使用这种类型的函数,但另一方面我必须将它放在标题中,不是吗?或者我可以将它放在源文件的顶部吗? 最佳答案 我想说的是将范围保持在最低限度;有了它,做最干净的事情。如果您将它用于一个功能,请将其保留在该功能的范围内。如果您将它用于多个功能,请将其设为私有(private)typedef。如果您希望

c++ - 在 typedef 结构体上使用 sizeof 运算符

这可能太明显了。但是,尽管许多stackoverflow线程讨论了这个问题的不同方面,但我找不到具体的答案。typedefstruct_tmp{unsignedinta;unsignedintb;}tmp;intmain(){intc=10;if(c我将这个程序编译为-g++-lstdc++a.cpp我得到一个错误-expectedprimary-expressionbefore‘)’token我想我遗漏了一些非常明显和直接的东西。但似乎无法确定它:-/谢谢! 最佳答案 5.3.3Sizeof[expr.sizeof]1)Thesi

c++ - typedef 和在同一范围内使用相同名称的声明

我搜索了C++11标准(嗯,n3242草案)和互联网,但找不到准确的答案。下面的代码可以在clang3.2和g++4.7.2以及VisualStudio2010中正常编译,但我预计会出现错误。#include#includetypedefinta_t;namespacea_ns{classa_t{};}usinga_ns::a_t;intmain(){a_ta;std::cout内置:clang-std=c++11-pedantic-Wall-oaa.cpp-lstdc++g++-std=c++11-pedantic-Wall-oaa.cpp-lstdc++cl-EHsc-GRa.cp

c++ - 强枚举 typedef : clang bug or c++11 standard uncertainty?

对于这样的代码:typedefenumFooEnum:intFooEnum;enumFooEnum:int{A=1,B};clang(linux/7.0.0)报告没有错误[-c-std=c++11-pedantic],但是gcc(linux/8.2.1)不编译它:g++-c-std=c++11-pedantictest2.cpptest2.cpp:1:28:error:expected';'or'{'before'FooEnum'typedefenumFooEnum:intFooEnum;^~~~~~~test2.cpp:1:28:error:expectedclass-keybefo

c++ - 无法与 typedef 成为 friend : any particular reason?

structA{};typedefAB;structC{friendstructB;};GCC4.7.020110427告诉我error:usingtypedef-name'B'after'struct'.到目前为止,这似乎是不言自明的;毕竟,我的示例代码试图声明并加好友struct称为B,实际上不是struct-key.但是,我必须写friendstructA;如果A实际上是一个复杂的、冗长的模板元黑客,这是不可取的。我是不是遗漏了什么,或者我们实际上可以不friend通过类型别名类型?如果不是,是否有任何特殊原因或者只是语言的怪癖?Thisquestion之前提出过这个问题,但是已

c++ - 重载运算符<<(unsigned char typedef as byte)

我想重载(劫持?)ostream和basic_ostream以便它停止尝试将八位字节(无符号字符)显示为可打印字符。我一直住在cout和friend们在屏幕上放笑脸的时间太长了。我厌倦了与Actor一起工作:hex.是否可以覆盖标准行为?我已经尝试过模板和非模板覆盖。它们编译,但似乎没有被调用。 最佳答案 问题是已经有一个templatestd::basic_ostream&operator&,charT);在namespacestd.自basic_ostream也在这个命名空间中,ADL在你输出unsignedchar时选择它.添

c++ - 具有 typedef 返回值的模板化成员函数

为什么下面的代码给我一个错误(g++4.1.2)?templateclassFoo{public:typedefstd::vectorAVec;AVec*foo();};templateFoo::AVec*Foo::foo(){//erroronthislinereturnNULL;}错误是:error:expectedconstructor,destructor,ortypeconversionbefore'*'token我应该如何定义Foo::foo()以其他方式运行(具有正确的返回类型)? 最佳答案 这是一个名为“two-st

c++ - 继承而不是 typedef

C++无法从typedef或typedef模板化类中创建模板。我知道如果我继承并使我的类成为模板,它就会起作用。例子://IllegaltemplatetypedefMyVectorTypevector;//Valid,butadvantageous?templateclassMyVectorType:publicvector{};这样做有利于我“伪造”typedef还是有更好的方法来做到这一点? 最佳答案 C++0x将使用using添加模板类型定义关键字。您的解决方案声明了一个新类型,而不是类型“别名”,例如你不能初始化MyVec

c++ - 如何 typedef 具有未指定大小的 std::array?

我想写一些变量,比如std::arraya;哪里array_num是constint表示数组的长度。但是它很长,我想为它创建一个别名:typedefstd::arraymy_array;是吗?如何使用my_array喜欢my_array? 最佳答案 您需要的是aliastemplate:templateusingmy_array=std::array;您不能直接制作typedef模板,参见thispost.size_t是std::array采用的第二个模板参数的类型,而不是int。既然您了解了使用,您应该会使用它。它可以做typed

python - 如何在 Redis 中为自定义类或对象添加唯一元素

我想向Redis列表添加唯一元素。但是我存储在Redis中的元素是自定义类对象。我有Message类,它有message_id、message_body、message_timestamp、message_from、message_to等字段。这里的唯一性基于message_id。因此Redis列表必须具有不同message_id的所有消息对象。我正在使用来自python的“redis”。 最佳答案 您确定要列表吗?听起来你需要一个哈希。将消息id作为你的键,将你的对象的json表示作为你的值。client.hset('my_key